package leetcode.N401_N500;

/**
 * @author 歪大哥😁
 * @date 2020-08-03.
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。
 *
 *  
 *
 * 提示：
 *
 * num1 和num2 的长度都小于 5100
 * num1 和num2 都只包含数字 0-9
 * num1 和num2 都不包含任何前导零
 * 你不能使用任何內建 BigInteger 库， 也不能直接将输入的字符串转换为整数形式
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/add-strings
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class N415 {


    public static void main(String[] args) {


    }

    public static String addStrings(String num1, String num2) {
        int l1 = num1.length();
        int l2 = num2.length();
        if (l1 == 0) {
            return num2;
        } else if (l2 == 0) {
            return num1;
        }
        int length;
        if (l1 > l2) {
            num2 = fillZero(num2, l1 - l2);
            length = l1;
        } else {
            num1 = fillZero(num1, l2 - l1);
            length = l2;
        }
        char[] chars1 = num1.toCharArray();
        char[] chars2 = num2.toCharArray();
        StringBuilder result = new StringBuilder();

        int zero = '0';
        int next = 0;
        for (int i = length - 1; i >= 0; i--) {

            int temp = (chars1[i] - zero) + (chars2[i] - zero) + next;
            if (temp > 9) {
                next = 1;
                result.append((char)((temp - 10) + '0'));
            } else {
                next = 0;
                result.append((char) (temp + '0'));
            }
        }
        if (next != 0) {
            result.append('1');
        }
        result.reverse();
        return result.toString();
    }

    private static String fillZero(String num2, int i) {
        StringBuilder sb = new StringBuilder();
        for (int i1 = 0; i1 < i; i1++) {
            sb.append('0');
        }
        sb.append(num2);
        return sb.toString();
    }

}
